-- 滑动窗口限流 Lua 脚本（增强版，兼容生产环境）
-- KEYS[1] 限流 Key
-- ARGV[1] 最大允许次数
-- ARGV[2] 时间窗口（单位：秒）

local key = KEYS[1]
local maxCount = tonumber(ARGV[1])
local window = tonumber(ARGV[2])

-- 获取当前时间戳（秒）
local now = redis.call('TIME')
local currentTime = tonumber(now[1])

-- 滑动窗口开始时间
local startTime = currentTime - window

-- 清除窗口外的数据
redis.call('ZREMRANGEBYSCORE', key, 0, startTime)

-- 添加当前请求时间戳到 ZSet（score 和 member 都使用 currentTime，防止重复）
redis.call('ZADD', key, currentTime, tostring(currentTime) .. "-" .. redis.call('INCR', key .. ':seq'))

-- 获取当前请求数量
local reqCount = redis.call('ZCARD', key)

-- 设置过期时间，冗余 2s 确保窗口滑动正常
redis.call('EXPIRE', key, window + 2)

-- 判断是否超过阈值
return reqCount
